{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "af263c99",
   "metadata": {},
   "source": [
    "# Pandas Intermediate to Advance\n",
    "\n",
    "## What's covered?\n",
    "1. Combining Data From Multiple Tables using pd.merge() Function\n",
    "\t- `how` argument\n",
    "\t- Learning with Two Example DataFrame\n",
    "\t- Applying Inner Join\n",
    "\t- Applying Left Join\n",
    "\t- Applying Right Join\n",
    "\t- Applying Outer Join\n",
    "\t- Applying Cross Join\n",
    "\t- Brief primer on merge methods (relational algebra)\n",
    "2. Solving a Case Study by Joining Multiple Tables\n",
    "\t- Reading .csv Files - customer_data.csv, product_data.csv and purchase_data.csv\n",
    "\t- Joining Purchase Table with Customer and Product Table\n",
    "\t- Generating Basic Reports on the Data\n",
    "3. Visual Data Analysis using Pandas (Plotting)\n",
    "\t- Reading .csv File - Iris Data\n",
    "\t- Histogram Plot\n",
    "\t- KDE Plot\n",
    "\t- Box Plot\n",
    "\t- Vertical and Horizontal Bar Plot\n",
    "\t- Scatter Plot"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dccfee3d",
   "metadata": {},
   "source": [
    "## Combining Data From Multiple Tables using `pd.merge()` Function\n",
    "\n",
    "`pandas` has full-featured, **high performance in-memory join operations** idiomatically very similar to relational databases like SQL. \n",
    "\n",
    "`pandas` provides a single function, **merge()**, as the entry point for all standard database join operations between DataFrame or named Series objects:\n",
    "\n",
    "<img style=\"float: right;\" width=\"400\" height=\"400\" src=\"images/00_merge_tables.PNG\">\n",
    "\n",
    "**Question: How to combine data from multiple tables?**  \n",
    "**Answer:** Multiple tables can be concatenated both column wise and row wise as database-like join/merge operations are provided to combine multiple tables of data.\n",
    "\n",
    "\n",
    "**Remember**  \n",
    "> 1. Multiple tables can be concatenated both column-wise and row-wise using the `concat` function.\n",
    "> 2. For database-like merging/joining of tables, use the `merge` function.\n",
    "\n",
    "<img src=\"images/01_merge_operation.PNG\"> \n",
    "\n",
    "**Syntax**  \n",
    "<code>pd.merge(left, right, how='inner', on=None)</code>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6fb1b867",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "431f674f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K2</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K3</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key   A   B\n",
       "0  K0  A0  B0\n",
       "1  K1  A1  B1\n",
       "2  K2  A2  B2\n",
       "3  K3  A3  B3"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({\"key\": [\"K0\", \"K1\", \"K2\", \"K3\"], \n",
    "                     \"A\": [\"A0\", \"A1\", \"A2\", \"A3\"], \n",
    "                     \"B\": [\"B0\", \"B1\", \"B2\", \"B3\"]\n",
    "                    })\n",
    "\n",
    "left"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "05b4e0f5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K3</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key   C   D\n",
       "0  K0  C0  D0\n",
       "1  K1  C1  D1\n",
       "2  K2  C2  D2\n",
       "3  K3  C3  D3"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "right = pd.DataFrame({\"key\": [\"K0\", \"K1\", \"K2\", \"K3\"], \n",
    "                      \"C\": [\"C0\", \"C1\", \"C2\", \"C3\"], \n",
    "                      \"D\": [\"D0\", \"D1\", \"D2\", \"D3\"]\n",
    "                     })\n",
    "\n",
    "right"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e5b42f15",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K2</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K3</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key   A   B   C   D\n",
       "0  K0  A0  B0  C0  D0\n",
       "1  K1  A1  B1  C1  D1\n",
       "2  K2  A2  B2  C2  D2\n",
       "3  K3  A3  B3  C3  D3"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, on=\"key\")\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83051ff6",
   "metadata": {},
   "source": [
    "### `how` argument\n",
    "\n",
    "<img style=\"float: right;\" width=\"400\" height=\"400\" src=\"images/02_joining_dataframes.PNG\">\n",
    "\n",
    "The `how` argument to `merge` specifies how to determine which keys are to be included in the resulting table. If a key combination **does not appear** in either the left or right tables, the values in the joined table will be `NA`. Here is a summary of the `how` options and their SQL equivalent names:\n",
    "\n",
    "| Merge method `(how)` | SQL Join Name | Description | Important Pointer |\n",
    "|:----|:----|:----|:----|\n",
    "| `inner` | `INNER JOIN` | Use intersection of keys from both frames | Display matching records from both tables |\n",
    "| `left` | `LEFT OUTER JOIN` | Use keys from left frame only | Display all records from the left table and matching records from the right table |\n",
    "| `right` | `RIGHT OUTER JOIN` | Use keys from right frame only | Display all records from the right table and matching records from the left table | \n",
    "| `outer` | `FULL OUTER JOIN` | Use union of keys from both frames |  Keep all the records from both tables |\n",
    "| `cross` | `CROSS JOIN` | Create the cartesian product of rows of both frames | Cartesian Product |\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "### Learning with Two Example DataFrame\n",
    "Let's consider the two dataframes given below and apply all merge operations:\n",
    "<img src=\"images/03_example_dataframes.PNG\">\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "feb7ea93",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2   A   B\n",
       "0   K0   K0  A0  B0\n",
       "1   K0   K1  A1  B1\n",
       "2   K1   K0  A2  B2\n",
       "3   K2   K1  A3  B3"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({\"key1\": [\"K0\", \"K0\", \"K1\", \"K2\"], \n",
    "                     \"key2\": [\"K0\", \"K1\", \"K0\", \"K1\"], \n",
    "                     \"A\": [\"A0\", \"A1\", \"A2\", \"A3\"], \n",
    "                     \"B\": [\"B0\", \"B1\", \"B2\", \"B3\"]\n",
    "                    })\n",
    "\n",
    "left"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "facefab0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2   C   D\n",
       "0   K0   K0  C0  D0\n",
       "1   K1   K0  C1  D1\n",
       "2   K1   K0  C2  D2\n",
       "3   K2   K0  C3  D3"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "right = pd.DataFrame({\"key1\": [\"K0\", \"K1\", \"K1\", \"K2\"], \n",
    "                      \"key2\": [\"K0\", \"K0\", \"K0\", \"K0\"], \n",
    "                      \"C\": [\"C0\", \"C1\", \"C2\", \"C3\"], \n",
    "                      \"D\": [\"D0\", \"D1\", \"D2\", \"D3\"]\n",
    "                     })\n",
    "\n",
    "right"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b334d0f",
   "metadata": {},
   "source": [
    "### Applying Inner Join\n",
    "\n",
    "**Use intersection of keys from both frames**\n",
    "<img src=\"images/04_inner_join.PNG\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b5825cdd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2   A   B   C   D\n",
       "0   K0   K0  A0  B0  C0  D0\n",
       "1   K1   K0  A2  B2  C1  D1\n",
       "2   K1   K0  A2  B2  C2  D2"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, on=[\"key1\", \"key2\"])\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "15b4aa84",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2   A   B   C   D\n",
       "0   K0   K0  A0  B0  C0  D0\n",
       "1   K1   K0  A2  B2  C1  D1\n",
       "2   K1   K0  A2  B2  C2  D2"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, how=\"inner\", on=[\"key1\", \"key2\"])\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50ea74d1",
   "metadata": {},
   "source": [
    "### Applying Left Join\n",
    "\n",
    "**Use keys from left frame only**\n",
    "\n",
    "<img src=\"images/05_left_join.PNG\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "15a8626c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2   A   B    C    D\n",
       "0   K0   K0  A0  B0   C0   D0\n",
       "1   K0   K1  A1  B1  NaN  NaN\n",
       "2   K1   K0  A2  B2   C1   D1\n",
       "3   K1   K0  A2  B2   C2   D2\n",
       "4   K2   K1  A3  B3  NaN  NaN"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, how=\"left\", on=[\"key1\", \"key2\"])\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8ce3c1d",
   "metadata": {},
   "source": [
    "### Applying Right Join\n",
    "\n",
    "**Use keys from right frame only**\n",
    "\n",
    "<img src=\"images/06_right_join.PNG\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "80f6f209",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2    A    B   C   D\n",
       "0   K0   K0   A0   B0  C0  D0\n",
       "1   K1   K0   A2   B2  C1  D1\n",
       "2   K1   K0   A2   B2  C2  D2\n",
       "3   K2   K0  NaN  NaN  C3  D3"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, how=\"right\", on=[\"key1\", \"key2\"])\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05accb98",
   "metadata": {},
   "source": [
    "### Applying Outer Join\n",
    "\n",
    "**Use union of keys from both frames**\n",
    "\n",
    "<img src=\"images/07_outer_join.PNG\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f40e37c2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key1 key2    A    B    C    D\n",
       "0   K0   K0   A0   B0   C0   D0\n",
       "1   K0   K1   A1   B1  NaN  NaN\n",
       "2   K1   K0   A2   B2   C1   D1\n",
       "3   K1   K0   A2   B2   C2   D2\n",
       "4   K2   K1   A3   B3  NaN  NaN\n",
       "5   K2   K0  NaN  NaN   C3   D3"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, how=\"outer\", on=[\"key1\", \"key2\"])\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0506d493",
   "metadata": {},
   "source": [
    "### Applying Cross Join\n",
    "\n",
    "**Create the cartesian product of rows of both frames**\n",
    "\n",
    "<img src=\"images/08_cross_join.PNG\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "3cc7b4cc",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1_x</th>\n",
       "      <th>key2_x</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>key1_y</th>\n",
       "      <th>key2_y</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>A0</td>\n",
       "      <td>B0</td>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>K0</td>\n",
       "      <td>K1</td>\n",
       "      <td>A1</td>\n",
       "      <td>B1</td>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>A2</td>\n",
       "      <td>B2</td>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>K0</td>\n",
       "      <td>K0</td>\n",
       "      <td>C0</td>\n",
       "      <td>D0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C1</td>\n",
       "      <td>D1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>K1</td>\n",
       "      <td>K0</td>\n",
       "      <td>C2</td>\n",
       "      <td>D2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>K2</td>\n",
       "      <td>K1</td>\n",
       "      <td>A3</td>\n",
       "      <td>B3</td>\n",
       "      <td>K2</td>\n",
       "      <td>K0</td>\n",
       "      <td>C3</td>\n",
       "      <td>D3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key1_x key2_x   A   B key1_y key2_y   C   D\n",
       "0      K0     K0  A0  B0     K0     K0  C0  D0\n",
       "1      K0     K0  A0  B0     K1     K0  C1  D1\n",
       "2      K0     K0  A0  B0     K1     K0  C2  D2\n",
       "3      K0     K0  A0  B0     K2     K0  C3  D3\n",
       "4      K0     K1  A1  B1     K0     K0  C0  D0\n",
       "5      K0     K1  A1  B1     K1     K0  C1  D1\n",
       "6      K0     K1  A1  B1     K1     K0  C2  D2\n",
       "7      K0     K1  A1  B1     K2     K0  C3  D3\n",
       "8      K1     K0  A2  B2     K0     K0  C0  D0\n",
       "9      K1     K0  A2  B2     K1     K0  C1  D1\n",
       "10     K1     K0  A2  B2     K1     K0  C2  D2\n",
       "11     K1     K0  A2  B2     K2     K0  C3  D3\n",
       "12     K2     K1  A3  B3     K0     K0  C0  D0\n",
       "13     K2     K1  A3  B3     K1     K0  C1  D1\n",
       "14     K2     K1  A3  B3     K1     K0  C2  D2\n",
       "15     K2     K1  A3  B3     K2     K0  C3  D3"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.merge(left, right, how=\"cross\")\n",
    "\n",
    "result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6b508b3",
   "metadata": {},
   "source": [
    "### Brief primer on merge methods (relational algebra)\n",
    "\n",
    "Experienced users of relational databases like SQL will be familiar with the terminology used to describe join operations between two SQL-table like structures (DataFrame objects). There are several cases to consider which are very important to understand:\n",
    "> 1. **one-to-one joins:** for example when joining two DataFrame objects on their indexes (which must contain unique values).\n",
    "> 2. **many-to-one joins:** for example when joining an index (unique) to one or more columns in a different DataFrame.\n",
    "> 3. **many-to-many joins:** joining columns on columns.\n",
    "\n",
    "It is worth spending some time understanding the result of the **many-to-many** join case. In SQL / standard relational algebra, if a key combination appears more than once in both tables, the resulting table will have the **Cartesian product** of the associated data."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdf52c31",
   "metadata": {},
   "source": [
    "## Solving a Case Study with merge()\n",
    "\n",
    "### Reading .csv Files - customer_data.csv, product_data.csv and purchase_data.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9bb675f9",
   "metadata": {},
   "outputs": [],
   "source": [
    "cust_df = pd.read_csv('data/customer_data.csv')\n",
    "\n",
    "prod_df = pd.read_csv('data/product_data.csv')\n",
    "\n",
    "pur_df = pd.read_csv('data/purchase_data.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "67e5e950",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12346</td>\n",
       "      <td>p_003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12347</td>\n",
       "      <td>p_002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12348</td>\n",
       "      <td>p_004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>p_001</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cust_id prod_id\n",
       "0  cust_12345   p_001\n",
       "1  cust_12346   p_003\n",
       "2  cust_12347   p_002\n",
       "3  cust_12348   p_004\n",
       "4  cust_12349   p_001"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pur_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4730408d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>cust_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>Sally</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12346</td>\n",
       "      <td>Jenna</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12347</td>\n",
       "      <td>Eliana</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12348</td>\n",
       "      <td>Cristen</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>Steve</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cust_id  cust_name\n",
       "0  cust_12345    Sally  \n",
       "1  cust_12346    Jenna  \n",
       "2  cust_12347   Eliana  \n",
       "3  cust_12348  Cristen  \n",
       "4  cust_12349    Steve  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cust_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "098cef0e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>prod_id</th>\n",
       "      <th>prod_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>p_001</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>p_002</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>p_003</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>p_004</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  prod_id                prod_name\n",
       "0   p_001         Machine Learning\n",
       "1   p_002          Data Structures\n",
       "2   p_003   Full Stack Development\n",
       "3   p_004  Competitive Programming"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prod_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18f06993",
   "metadata": {},
   "source": [
    "### Joining Purchase Table, Customer and Product Table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a747c279",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "      <th>cust_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Sally</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12346</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Jenna</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12347</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Eliana</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12348</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Cristen</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Steve</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cust_id prod_id  cust_name\n",
       "0  cust_12345   p_001    Sally  \n",
       "1  cust_12346   p_003    Jenna  \n",
       "2  cust_12347   p_002   Eliana  \n",
       "3  cust_12348   p_004  Cristen  \n",
       "4  cust_12349   p_001    Steve  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.merge(pur_df, cust_df, how='inner', on='cust_id')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9dc940fb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "      <th>cust_name</th>\n",
       "      <th>prod_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Sally</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Steve</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12350</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Kelli</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12352</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Aretha</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12355</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Carla</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cust_id prod_id cust_name         prod_name\n",
       "0  cust_12345   p_001   Sally    Machine Learning\n",
       "1  cust_12349   p_001   Steve    Machine Learning\n",
       "2  cust_12350   p_001   Kelli    Machine Learning\n",
       "3  cust_12352   p_001  Aretha    Machine Learning\n",
       "4  cust_12355   p_001   Carla    Machine Learning"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.merge(df, prod_df, how='inner', on='prod_id')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f4ee5b3",
   "metadata": {},
   "source": [
    "### Generating Basic Reports on the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b259370b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# # Try it yourself"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "972466c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Machine Learning           9\n",
       "Data Structures            9\n",
       "Competitive Programming    6\n",
       "Full Stack Development     5\n",
       "Name: prod_name, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.prod_name.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "22ae06f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000021D44A2E700>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df = df.groupby('prod_name')\n",
    "\n",
    "grouped_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1b4902d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "      <th>cust_name</th>\n",
       "      <th>prod_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Sally</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Steve</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12350</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Kelli</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12352</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Aretha</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12355</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Carla</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>cust_12346</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Jenna</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>cust_12353</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Pansy</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>cust_12359</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Latrisha</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>cust_12363</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Shela</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>cust_12370</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Angla</td>\n",
       "      <td>Full Stack Development</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>cust_12347</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Eliana</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>cust_12350</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Kelli</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>cust_12354</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Jennell</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>cust_12356</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Hiram</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>cust_12357</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Normand</td>\n",
       "      <td>Data Structures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>cust_12348</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Cristen</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>cust_12351</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Carmelita</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>cust_12360</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Jessica</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>cust_12362</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Trinity</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>cust_12366</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Genna</td>\n",
       "      <td>Competitive Programming</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       cust_id prod_id    cust_name                prod_name\n",
       "0   cust_12345   p_001      Sally           Machine Learning\n",
       "1   cust_12349   p_001      Steve           Machine Learning\n",
       "2   cust_12350   p_001      Kelli           Machine Learning\n",
       "3   cust_12352   p_001     Aretha           Machine Learning\n",
       "4   cust_12355   p_001      Carla           Machine Learning\n",
       "9   cust_12346   p_003      Jenna     Full Stack Development\n",
       "10  cust_12353   p_003      Pansy     Full Stack Development\n",
       "11  cust_12359   p_003   Latrisha     Full Stack Development\n",
       "12  cust_12363   p_003      Shela     Full Stack Development\n",
       "13  cust_12370   p_003      Angla     Full Stack Development\n",
       "14  cust_12347   p_002     Eliana            Data Structures\n",
       "15  cust_12350   p_002      Kelli            Data Structures\n",
       "16  cust_12354   p_002    Jennell            Data Structures\n",
       "17  cust_12356   p_002      Hiram            Data Structures\n",
       "18  cust_12357   p_002    Normand            Data Structures\n",
       "23  cust_12348   p_004    Cristen    Competitive Programming\n",
       "24  cust_12351   p_004  Carmelita    Competitive Programming\n",
       "25  cust_12360   p_004    Jessica    Competitive Programming\n",
       "26  cust_12362   p_004    Trinity    Competitive Programming\n",
       "27  cust_12366   p_004      Genna    Competitive Programming"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "505cacc1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "      <th>cust_name</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>prod_name</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Competitive Programming</th>\n",
       "      <td>cust_12348</td>\n",
       "      <td>p_004</td>\n",
       "      <td>Cristen</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Data Structures</th>\n",
       "      <td>cust_12347</td>\n",
       "      <td>p_002</td>\n",
       "      <td>Eliana</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Full Stack Development</th>\n",
       "      <td>cust_12346</td>\n",
       "      <td>p_003</td>\n",
       "      <td>Jenna</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Machine Learning</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Sally</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            cust_id prod_id  cust_name\n",
       "prod_name                                             \n",
       "Competitive Programming  cust_12348   p_004  Cristen  \n",
       "Data Structures          cust_12347   p_002   Eliana  \n",
       "Full Stack Development   cust_12346   p_003    Jenna  \n",
       "Machine Learning         cust_12345   p_001    Sally  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df.first()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1751d701",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['Competitive Programming', 'Data Structures', 'Full Stack Development', 'Machine Learning'])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df.groups.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d3cc29aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cust_id</th>\n",
       "      <th>prod_id</th>\n",
       "      <th>cust_name</th>\n",
       "      <th>prod_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cust_12345</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Sally</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cust_12349</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Steve</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cust_12350</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Kelli</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cust_12352</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Aretha</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cust_12355</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Carla</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>cust_12357</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Normand</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>cust_12358</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Nam</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>cust_12367</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Taunya</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>cust_12369</td>\n",
       "      <td>p_001</td>\n",
       "      <td>Dung</td>\n",
       "      <td>Machine Learning</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cust_id prod_id  cust_name         prod_name\n",
       "0  cust_12345   p_001    Sally    Machine Learning\n",
       "1  cust_12349   p_001    Steve    Machine Learning\n",
       "2  cust_12350   p_001    Kelli    Machine Learning\n",
       "3  cust_12352   p_001   Aretha    Machine Learning\n",
       "4  cust_12355   p_001    Carla    Machine Learning\n",
       "5  cust_12357   p_001  Normand    Machine Learning\n",
       "6  cust_12358   p_001      Nam    Machine Learning\n",
       "7  cust_12367   p_001   Taunya    Machine Learning\n",
       "8  cust_12369   p_001     Dung    Machine Learning"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df.get_group('Machine Learning')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1172e208",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"4\" halign=\"left\">cust_id</th>\n",
       "      <th colspan=\"4\" halign=\"left\">prod_id</th>\n",
       "      <th colspan=\"4\" halign=\"left\">cust_name</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>unique</th>\n",
       "      <th>top</th>\n",
       "      <th>freq</th>\n",
       "      <th>count</th>\n",
       "      <th>unique</th>\n",
       "      <th>top</th>\n",
       "      <th>freq</th>\n",
       "      <th>count</th>\n",
       "      <th>unique</th>\n",
       "      <th>top</th>\n",
       "      <th>freq</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>prod_name</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Competitive Programming</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>cust_12348</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>p_004</td>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>Cristen</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Data Structures</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>cust_12347</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>p_002</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>Eliana</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Full Stack Development</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>cust_12346</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>p_003</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>Jenna</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Machine Learning</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>cust_12345</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>p_001</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>Sally</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        cust_id                         prod_id                \\\n",
       "                          count unique         top freq   count unique    top   \n",
       "prod_name                                                                       \n",
       "Competitive Programming       6      6  cust_12348    1       6      1  p_004   \n",
       "Data Structures               9      9  cust_12347    1       9      1  p_002   \n",
       "Full Stack Development        5      5  cust_12346    1       5      1  p_003   \n",
       "Machine Learning              9      9  cust_12345    1       9      1  p_001   \n",
       "\n",
       "                             cust_name                         \n",
       "                        freq     count unique        top freq  \n",
       "prod_name                                                      \n",
       "Competitive Programming    6         6      6  Cristen      1  \n",
       "Data Structures            9         9      9   Eliana      1  \n",
       "Full Stack Development     5         5      5    Jenna      1  \n",
       "Machine Learning           9         9      9    Sally      1  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ebda997f",
   "metadata": {},
   "source": [
    "## Visual Data Analysis using Pandas (Plotting)\n",
    "\n",
    "**Syntax**   \n",
    "<code>DataFrame.plot(kind = \"kind\")</code>\n",
    "\n",
    "The kind of plot to produce:\n",
    "1. `line` : line plot (default)\n",
    "2. `bar` : vertical bar plot\n",
    "3. `barh` : horizontal bar plot\n",
    "4. `hist` : histogram\n",
    "5. `box` : boxplot\n",
    "6. `kde` : Kernel Density Estimation plot\n",
    "7. `density` : same as ‘kde’\n",
    "8. `area` : area plot\n",
    "9. `pie` : pie plot\n",
    "10. `scatter` : scatter plot\n",
    "11. `hexbin` : hexbin plot"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a2a58a2",
   "metadata": {},
   "source": [
    "### Reading .csv File - Iris Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "46e6becf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "c0320792",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>SepalLengthCm</th>\n",
       "      <th>SepalWidthCm</th>\n",
       "      <th>PetalLengthCm</th>\n",
       "      <th>PetalWidthCm</th>\n",
       "      <th>Species</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species\n",
       "0   1            5.1           3.5            1.4           0.2  Iris-setosa\n",
       "1   2            4.9           3.0            1.4           0.2  Iris-setosa\n",
       "2   3            4.7           3.2            1.3           0.2  Iris-setosa\n",
       "3   4            4.6           3.1            1.5           0.2  Iris-setosa\n",
       "4   5            5.0           3.6            1.4           0.2  Iris-setosa"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('data/Iris.csv')\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0511352",
   "metadata": {},
   "source": [
    "### Histogram Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e72b2341",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='Frequency'>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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KSkpqdrxxMREHT58+LKHAgAAaAivgiY6Olq7du2qdnznzp1q3br1ZQ8FAADQEF4FzbBhw/T4449r3bp1qqysVGVlpdauXausrCwNGzbM1zMCAADUyaubgp955hkdOnRIffv2VWjoDx9RVVWlESNGcA8NAABocl4FTbNmzfTmm2/qT3/6k3bu3Knw8HB17txZiYmJvp4PAADgkrwKmotSUlKUkpLiq1kAAAC84lXQVFZW6rXXXtNHH32k0tJSVVVVeby+du1anwwHAABQH17dFJyVlaWsrCxVVlYqNTVVXbp08XjU18aNGzVo0CDFx8fL4XDovffe83h91KhRcjgcHo/u3bt7MzIAAAhiXl2heeONN/TWW29pwIABl/WHl5eXq0uXLho9erTuu+++Gs+56667lJeX537erFmzy/ozAQBA8PH6puDrr7/+sv/w/v37q3///nWe43Q6a/0CTAAAAMnLHzlNnjxZf/nLX2SM8fU81axfv17R0dFKSUnRI488otLS0jrPr6iokMvl8ngAAIDg5tUVmk2bNmndunX64IMP1KlTJ4WFhXm8vnz5cp8M179/fw0ZMkSJiYkqKirSH//4R915553atm2bnE5nje/JycnRrFmzfPLnAwAAO3gVNFdffbUGDx7s61mqGTp0qPufU1NTlZ6ersTERK1cuVKZmZk1vmf69OnKzs52P3e5XEpISGj0WQEAgP94FTQ/vkm3KcXFxSkxMVGFhYW1nuN0Omu9egMAAIKTV/fQSNKFCxe0Zs0avfzyyyorK5MkHT9+XGfOnPHZcD918uRJHTlyRHFxcY32ZwAAAPt4dYXm0KFDuuuuu3T48GFVVFSoX79+ioyM1PPPP6+zZ89q4cKF9fqcM2fO6KuvvnI/Lyoq0o4dO9SqVSu1atVKM2fO1H333ae4uDgdPHhQv//979WmTZsm+XEXAACwh9d/sV56erpOnTql8PBw9/HBgwfro48+qvfnbN26VWlpaUpLS5MkZWdnKy0tTf/3f/+nkJAQffHFF7rnnnuUkpKikSNHKiUlRZ9++qkiIyO9GRsAAAQpr3/L6eOPP672l9wlJibq2LFj9f6c3r171/mr36tWrfJmPAAAcIXx6gpNVVWVKisrqx0/evQoV08AAECT8ypo+vXrp3nz5rmfOxwOnTlzRk899dRlfx0CAABAQ3n1I6cXXnhB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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['SepalLengthCm'].plot(kind = 'hist')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c2c64211",
   "metadata": {},
   "source": [
    "### KDE Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "e0cb4150",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='Density'>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['SepalLengthCm'].plot(kind = 'kde')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0f99c76",
   "metadata": {},
   "source": [
    "### Box Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "41d47126",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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njypuLg4uVwu2+MA6EN+v18+n0/19fWKj4+3PQ6APmSM0ZkzZ5SamqoBAzp/MiQsYgRA/+X3++XxeNTS0kKMAFcoHmAFAABWESMAAMAqYgSAVW63W8uXL5fb7bY9CgBLeGYEAABYxZ0RAABgFTECAACsIkYAAIBVxAiAHnG5XHr55Zdtj9Et4TQrcCUiRoAw09zcrAceeEBDhw6V2+1WSkqKcnNzVVVVZXWuy+Eb/ooVKzRx4sQer6+oqNDNN98sj8ej2NhYTZgwQY899pj+93//t++GBHARYgQIM3PnztW7776rjRs36siRI9q6datuvvlmvmH20r/8y7/orrvu0o033qgdO3bovffe069+9Su9++67eu6552yPB/RvBkDYOH36tJFkKisrOz3n448/NosWLTKJiYkmLi7OzJw507zzzjvB15cvX26uv/56U1paaoYMGWKio6PNnXfeaU6fPh08Z9++feaWW24xCQkJJj4+3kyfPt0cOHAg5H0kmZdeeqnT/b+3bt06M3r0aON2u82oUaPMM888E3yttrbWSDIVFRXm5ptvNtHR0WbChAnmD3/4Q8g1ysrKgjPfcccd5le/+pXxeDzGGGPWr19vJIVs69evD862Zs0ac8cdd5jo6GgzcuRI81//9V/B67711ltGkikpKelw9gv/Nhf+7dauXWt8Pp+JiYkxixcvNufOnTMrV640ycnJJjEx0TzxxBOd/jsAuBgxAoSRtrY2Exsbax5++GHz+eefX/R6e3u7mTp1qpkzZ47Zv3+/OXLkiHnkkUdMQkKC+eijj4wxX3xDjYmJMf/4j/9oDh48aPbs2WNGjhxpvv3tbwev87vf/c4899xz5s9//rP585//bL73ve+Z5ORk4/f7g+c4iZGysjLj9XpNRUWFOX78uKmoqDDXXHON2bBhgzHmrzEyevRo88orr5iamhpz5513mmHDhpm2tjZjjDF79+41AwYMMP/6r/9qampqzDPPPGOuueaaYIx8+umn5pFHHjEZGRmmsbHRNDY2mk8//TQ425AhQ8zmzZvN0aNHTX5+vomNjQ3+m1zYb21t7fLff/ny5SY2Ntbceeed5k9/+pPZunWrGTRokMnNzTVLly41hw8fNuvWrTOSTFVVVZfXAvBXxAgQZv7zP//TXH311SYqKsrcdNNNpqioyLz77rvGmC8iIj4+/qJQGTFihPmP//gPY8wX31AjIiJMfX198PUdO3aYAQMGmMbGxg7f89y5cyYuLs789re/DR5zEiM+n89s3rw55Njjjz9usrOzjTF/jZHf/OY3wdf/9Kc/GUnm0KFDxhhj7rrrLjN79uyQa9xzzz3BGLnwtV1//fUXvb8k8+Mf/zi4f/bsWeNyucyOHTuMMcbcdtttZsKECR3O/reWL19urrrqqpAoy83NNWlpaeb8+fPBY6NGjTLFxcWXvB6AL/DMCBBm5s6dq5MnT2rr1q3Kzc1VZWWlbrjhBm3YsEEHDhzQ2bNnlZCQoNjY2OBWW1urY8eOBa8xdOhQDRkyJLifnZ2t9vZ21dTUSPriIdnFixfruuuuk8fjkcfj0dmzZ1VXV+d43g8//FD19fX63ve+FzLTE088ETKTJE2YMCH4f3u93uAsklRTU6Ovfe1rIef//X5X/vbaMTExiouLC17bGCOXy9Wt66SlpSkuLi64n5ycrLFjx4b8efTk5OTgtQFcWqTtAQA4FxUVpVtvvVW33nqrfvrTn+r+++/X8uXLtWTJEnm9XlVWVl60ZvDgwZ1e78I34gv/ve+++/Thhx+qpKREw4YNk9vtVnZ2tlpbWx3P2t7eLklas2aNJk+eHPJaREREyP7AgQMvmunC+o6CwTj4axZ/e+0L179w7euuu0579+5VW1vbRed15zpdXRvApXFnBOgHxo4dq08++UQ33HCDmpqaFBkZqZEjR4ZsX/nKV4Ln19XV6eTJk8H9qqoqDRgwQNddd50k6fe//73y8/OVl5enjIwMud1unTp1qkezJScn69prr9Xx48cvmik9Pb3b1xk9erT27dsXcqy6ujpkf9CgQTp//rzjGb/97W/r7Nmz+vWvf93h6x9//LHjawLoPu6MAGHko48+0rx587Rw4UJNmDBBcXFxqq6u1i9/+Ut94xvf0C233KLs7GzdcccdWrlypUaNGqWTJ09q+/btuuOOO5SVlSXpizsrCxYs0KpVq+T3+5Wfn69vfetbSklJkSSNHDlSzz33nLKysuT3+/X9739f0dHRl5yvtrZW77zzTsixkSNHasWKFcrPz1d8fLxuu+02BQIBVVdX6/Tp0yooKOjW17506VJNnz5dTz31lObMmaP/+Z//0Y4dO0LulqSlpQVnGDJkiOLi4rr114AnT56sRx99VI888ogaGhr0zW9+U6mpqXr//fdVWlqqadOm6aGHHurWnACc484IEEZiY2M1efJk/du//ZumT5+ucePG6Sc/+YkWLVqkf//3f5fL5dL27ds1ffp0LVy4UNddd53mz5+vv/zlL0pOTg5eZ+TIkfqnf/on5eXladasWRo3blzIXYF169bp9OnTyszM1D//8z8rPz9fSUlJl5yvoKBAmZmZIVt1dbXuv/9+/eY3v9GGDRs0fvx4zZgxQxs2bHB0Z2Tq1KkqLS3VU089peuvv17//d//rWXLlikqKip4zty5c/X1r39dM2fOVGJiop5//vluX3/lypXavHmz3nrrLeXm5iojI0MFBQWaMGGCFixY0O3rAHDOZZx86Aog7K1YsUIvv/zyRXcwwtGiRYt0+PBh/f73v7c9CoBe4GMaAGFj1apVuvXWWxUTE6MdO3Zo48aNnT7nASB8ECMAwsa+ffv0y1/+UmfOnNHw4cO1evVq3X///bbHAtBLfEwDAACs4gFWAABgFTECAACsIkYAAIBVxAgAALCKGAEAAFYRIwAAwCpiBAAAWEWMAAAAq4gRAABg1f8FwoDMKaGMpboAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['SepalLengthCm'].plot(kind = 'box')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c861e200",
   "metadata": {},
   "source": [
    "### Vertical and Horizontal Bar Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "d72863bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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rb7zne84PSJCTJcuXbR79+5mq3Ewg/gIQh07dtTx48cVFxfnd/zUqVOKi4tjORGO2L59uxYvXqyPP/7Ytxr3/PPP66677nJ6NISgcePGKS8vT/fff7/To4Qk3nYJQrZtX3UJ8c9//rNiYmIcmAiQhg4dqjfffNPpMQBJl/dDev755+X1epWent7sE4KDBw92aLLQwMpHELnrrrtkWZZ2796t22+/XWFh/9eWly5dUkVFhe6//36tXbvWwSkRit577z117NhR9913n9/x//mf/1FTU5OysrIcmgyhqkOH5ntsWpbl++WNFeLAYuUjiFy5C+OuXbt03333qWvXrr7nOnXqpOTkZE2cONGh6RDK5syZo4ULFzY7btu25syZQ3zAOD7e7SxWPoLQihUrlJ2drc6dOzs9CiBJioiI0Mcff6zk5GS/40ePHtXtt9+uc+fOOTMYAEew8hGEJk+erLNnz+rNN9/UJ598otmzZys2NlY7duxQfHy8brnlFqdHRIiJiYnRkSNHmsXH4cOH1aVLF2eGQsjZsGGDsrKyFB4erg0bNnzluQ8//LChqUITKx9B6KOPPtL48eMVExOjo0eP6sCBA+rTp49eeOEFHTt2TCtXrnR6RISYKVOmaOvWrVq/fr369u0r6XJ4TJw4UXfffbdeffVVhydEKOjQoYO8Xq/i4uKues3HFVzzEXjc1TYIzZw5U08++aQOHTrk99ZLVlaWPvzwQwcnQ6h6+eWX1aVLF912221KSUlRSkqKBgwYoO7du+unP/2p0+MhRDQ1Nfm2IGhqarrmg/AIPFY+glBMTIx27Nihvn37KioqSrt371afPn107Ngx9e/fn62s4QjbtuXxeLR7925FRERo8ODB3D8DCFFc8xGEOnfurNra2mbHDxw4oB49ejgwEXB5KTszM1OZmZlOjwJoyZIlVz1uWZY6d+6sfv36adSoUerYsaPhyUIDKx9BaMqUKTpx4oTWrl2r2NhYffTRR+rYsaMeffRRjRo1SkVFRU6PiBCwZMkSTZkyRZ07d77mX/RX/OhHPzI0FXBZSkqKTpw4ofr6enXr1k22bevs2bOKjIxU165dVV1drT59+uh3v/udkpKSnB436BAfQai2tlYPPPCAysvLVVdXp8TERHm9Xt1zzz167733+HQBjEhJSdG2bdvUvXt3paSkXPM8y7J05MgRg5MB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A9MA/2f//v3sqYA25Vp3/05OTtbw4cMdni74ER9BJCYmxukRgKv66z0Vdu3apT59+jg4EULdlbt/JyUlqaSkRAsWLJDE3b9NIT6CyOuvv+70CMDX4p1etAVX7v6dmprK3b8dQHwAAELO4sWLlZycrKqqKi1atIi7fxvGBacAjHrmmWf0L//yL7r55pudHgWAQ4gPAI5gTwWYxt2/2w7iA0DAsacC2gLu/t12sL06gIBbvny572ONHo9HHo9H77//vrKysjR79myHp0Oo4O7fbQfxASDgrrWnQl5ensrKyhyeDqGGu387j/gAEHBX9lSQpJKSEo0fP14SeyrAGdz923nEB4CAu7KnQkZGBnsqoE3g7t/OYp8PAAHHngpoa7j7t7P4tAsAIORw929nER8AAoI9FQBcC/EBICDYUwFtEXf/bhu45gNAQDQ1NV31nwEncffvtoGVDwABdeHCBWVmZmr58uVKS0tzehwAbQAftQUQUOypAOCvER8AAo49FQB8Gdd8AAg49lQA8GVc8wEg4NhTAcCXER8AAMAo3nYBEDDsqQDgaogPAAHDngoAroa3XQAAgFF81BYAABhFfAAAAKOIDwAAYBTxAQAAjCI+AACAUcQHAAAwivgAAABGER8AAMCo/wfmcNS6Oan/4AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['Species'].value_counts().plot(kind='bar')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "46c28c5f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmoAAAGdCAYAAACirV9DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAh60lEQVR4nO3df1BVdeL/8ddF5ILCRUsRSBRZRUJFF7FWM5REzVjTzAWMfjDO5miSuWa11vTxB9uCbmnrWq399PfPSMctc/1tpbmiy1XyB5qC0Ig65QhmJqnn+0fj/XYTUFfwvsHnY+bMyDnnnvO+b6z7nHPuvdosy7IEAAAA43h5egAAAACoHKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGMrb0wPAjbl06ZKOHTumgIAA2Ww2Tw8HAABcA8uydObMGYWGhsrLq+rrZoRaHXfs2DGFhYV5ehgAAOB/UFJSopYtW1a5nVCr4wICAiT9/It2OBweHg0AALgW5eXlCgsLc72OV4VQq+Mu3+50OByEGgAAdczV3rbEhwkAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwlLenB4Ca0XHiv+Vlb+TpYQAAUG8UZSd5eghcUQMAADAVoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADCUR0LNZrNp5cqVtXLszZs3y2az6fTp0zd8rOsd55w5c9SkSZMbPi8AAIAkedf0AdPT03X69OlqA6e0tFRNmzat6VNLknr06KHS0lIFBgbe8LGud5wpKSl64IEHbvi8AAAAUi2EWnUqKirk4+Oj4ODgWjvH1Y5/8eJF2Ww2eXld/WLi9Y7Tz89Pfn5+1/UYAACAqtTqrc/evXsrIyND48aNU7NmzdS3b19J7rcUKyoqlJGRoZCQEPn6+io8PFxZWVmVHq+goEA2m00HDhxwWz99+nSFh4fLsqwrbn1evh358ccfKzo6Wna7XUePHlVpaamSkpLk5+enNm3aaNGiRQoPD9frr7/uOu4vx1lUVCSbzaaPPvpICQkJatSokTp37qwvv/zStX9ltz5XrVqluLg4+fr6qlmzZhoyZIhr24IFCxQXF6eAgAAFBwfrkUce0cmTJ/+HmQYAAPVRrb9Hbe7cufL29tbWrVs1e/bsK7bPnDlTq1at0rJly1RQUKAFCxYoPDy80mO1b99eXbt21cKFC93WL1q0SI888ohsNlulj/vhhx+UlZWld999V3v37lVQUJAef/xxHTt2TJs3b1ZOTo7efvvta4qkl156SePHj5fT6VRkZKSGDRumCxcuVLrvJ598oiFDhigpKUl5eXnasGGD4uLiXNsrKiqUmZmp3bt3a+XKlSosLFR6enq15z9//rzKy8vdFgAAUD/V+q3Ptm3batq0aVVuLy4uVrt27dSzZ0/ZbDa1bt262uOlpaVp1qxZyszMlCQdPHhQu3bt0rx586p8zE8//aQ333xTnTt3liQdOHBA69evV25uriuc3n33XbVr1+6qz2f8+PFKSkqSJE2ePFkdOnTQ119/raioqCv2feWVV5SamqrJkye71l0egyQNHz7c9eeIiAjNnDlTd911l77//nv5+/tXev6srCy34wEAgPqr1q+o/fIKUmXS09PldDrVvn17jRkzRmvXrnVtGzlypPz9/V2LJKWmpuro0aPavn27JGnhwoXq0qWLoqOjqzyHj4+PYmJiXD8XFBTI29tbsbGxrnVt27a9pg8O/PI4ISEhklTllTin06k+ffpUeay8vDwNGjRIrVu3VkBAgHr37i3p53ityoQJE1RWVuZaSkpKrjpmAABQN9V6qDVu3Lja7bGxsSosLFRmZqbOnTun5ORkDR06VJI0ZcoUOZ1O1yL9HEcJCQlatGiRJGnx4sV69NFHqz2Hn5+f221Ry7Iq3a+q9b/UsGFD158vH/PSpUtVnrcqZ8+eVb9+/eTv768FCxYoNzdXK1askPTzLdGq2O12ORwOtwUAANRPRnzhrcPhUEpKit555x0tXbpUOTk5OnXqlIKCgtS2bVvXcllaWpqWLl2qL7/8UocPH1Zqaup1nS8qKkoXLlxQXl6ea93XX39dI9+99ksxMTHasGFDpdsOHDigb7/9VtnZ2br33nsVFRXFBwkAAIAbj4fajBkztGTJEh04cEAHDx7U8uXLFRwcXO0Xxw4ZMkTl5eUaNWqUEhISdMcdd1zXOaOiopSYmKgRI0Zox44dysvL04gRI6648najJk6cqMWLF2vixInav3+/8vPzXe/Xa9WqlXx8fPSPf/xDR44c0apVq1zvuwMAAJAMCDV/f39NnTpVcXFx6tatm4qKirR69epqv+fM4XBo4MCB2r17t9LS0v6n886bN08tWrRQfHy8HnroIT355JMKCAiQr6/v//pUrtC7d28tX75cq1atUpcuXXTffffpP//5jySpefPmmjNnjpYvX67o6GhlZ2fr1VdfrbFzAwCAus9mXcsbs24B33zzjcLCwrR+/fpqPwBgmvLycgUGBips7DJ52Rt5ejgAANQbRdlJtXbsy6/fZWVl1b7f/Kb+ywQm2bhxo77//nt16tRJpaWlev755xUeHq74+HhPDw0AAEDSLRxqP/30k1588UUdOXJEAQEB6tGjhxYuXOj2qU4AAABPumVDrX///urfv7+nhwEAAFAlj3+YAAAAAJUj1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChvTw8ANeOryf3lcDg8PQwAAFCDuKIGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACG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MLDaYzZp0kTvvPOO7rnnHsXExGjDhg3617/+pdtvv73S/XNyctStWzcNGzZM0dHRev75510hGBsbq2XLlmnJkiXq2LGj/u///k9Tpkyp9IME0v//upKmTZsqPj5eiYmJioiI0NKlS68yewAA4FZns/jCrjqtvLxcgYGBChu7TF52c760FwCAuq4oO6nWjn359busrKza95vzj7IDAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAM5e3pAaBmfDW5vxwOh6eHAQAAahBX1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUN6eHgBqRseJ/5aXvZGnhwEAQL1RlJ3k6SFwRQ0AAMBUhBoAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQdSbUbDabVq5c6elhAAAA3DRGhFp6eroGDx5c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tyxLZ86cUWhoaLX7EWp1nJfXz28zDAwM5D9gD3A4HMy7hzD3nsG8ew5z7xm1Oe/XcoGFDxMAAAAYilADAAAwFKFWx9ntdk2cOFF2u93TQ7mlMO+ew9x7BvPuOcy9Z5gy7zbrap8LBQAAgEdwRQ0AAMBQhBoAAIChCDUAAABDEWoAAACGItTqsDfffFNt2rSRr6+vunbtqs8//9zTQ6p3PvvsMw0cOFChoaGy2WxauXKl23bLsjRp0iSFhobKz89PvXv31t69ez0z2HokKytL3bp1U0BAgIKCgjR48GAVFBS47cPc17y33npLMTExri/47N69uz799FPXdub85sjKypLNZtPYsWNd65j72jFp0iTZbDa3JTg42LXdhHkn1OqopUuXauzYsXrppZeUl5ene++9VwMGDFBxcbGnh1avnD17Vp07d9asWbMq3T5t2jRNnz5ds2bNUm5uroKDg9W3b1+dOXPmJo+0ftmyZYtGjx6t7du3a926dbpw4YL69euns2fPuvZh7mtey5YtlZ2drZ07d2rnzp267777NGjQINcLE3Ne+3Jzc/X2228rJibGbT1zX3s6dOig0tJS15Kfn+/aZsS8W6iT7rrrLmvkyJFu66Kioqw///nPHhpR/SfJWrFihevnS5cuWcHBwVZ2drZr3Y8//mgFBgZa//znPz0wwvrr5MmTliRry5YtlmUx9zdT06ZNrXfffZc5vwnOnDljtWvXzlq3bp3Vq1cv65lnnrEsi7/vtWnixIlW586dK91myrxzRa0Oqqio0K5du9SvXz+39f369dO2bds8NKpbT2FhoY4fP+72e7Db7erVqxe/hxpWVlYmSbrtttskMfc3w8WLF7VkyRKdPXtW3bt3Z85vgtGjRyspKUmJiYlu65n72nXo0CGFhoaqTZs2Sk1N1ZEjRySZM+/8o+x10LfffquLFy+qRYsWbutbtGih48ePe2hUt57Lc13Z7+Ho0aOeGFK9ZFmWxo0bp549e6pjx46SmPvalJ+fr+7du+vHH3+Uv7+/VqxYoejoaNcLE3NeO5YsWaJdu3Zp586dV2zj73vtufvuuzVv3jxFRkbqxIkT+stf/qIePXpo7969xsw7oVaH2Ww2t58ty7piHWofv4falZGRoT179uiLL764YhtzX/Pat28vp9Op06dPKycnR0888YS2bNni2s6c17ySkhI988wzWrt2rXx9favcj7mveQMGDHD9uVOnTurevbt+85vfaO7cufrd734nyfPzzq3POqhZs2Zq0KDBFVfPTp48eUX5o/Zc/mQQv4fa8/TTT2vVqlXatGmTWrZs6VrP3NceHx8ftW3bVnFxccrKylLnzp3197//nTmvRbt27dLJkyfVtWtXeXt7y9vbW1u2bNHMmTPl7e3tml/mvvY1btxYnTp10qFDh4z5O0+o1UE+Pj7q2rWr1q1b57Z+3bp16tGjh4dGdetp06aNgoOD3X4PFRUV2rJlC7+HG2RZljIyMvTRRx9p48aNatOmjdt25v7msSxL58+fZ85rUZ8+fZSfny+n0+la4uLilJaWJqfTqYiICOb+Jjl//rz279+vkJAQc/7O37SPLaBGLVmyxGrYsKH13nvvWfv27bPGjh1rNW7c2CoqKvL00OqVM2fOWHl5eVZeXp4lyZo+fbqVl5dnHT161LIsy8rOzrYCAwOtjz76yMrPz7eGDRtmhYSEWOXl5R4eed02atQoKzAw0Nq8ebNVWlrqWn744QfXPsx9zZswYYL12WefWYWFhdaePXusF1980fLy8rLWrl1rWRZzfjP98lOflsXc15Znn33W2rx5s3XkyBFr+/bt1u9//3srICDA9VpqwrwTanXYG2+8YbVu3dry8fGxYmNjXV9dgJqzadMmS9IVyxNPPGFZ1s8f3544caIVHBxs2e12Kz4+3srPz/fsoOuByuZckvXBBx+49mHua97w4cNd/09p3ry51adPH1ekWRZzfjP9OtSY+9qRkpJihYSEWA0bNrRCQ0OtIUOGWHv37nVtN2HebZZlWTfv+h0AAACuFe9RAwAAMBShBgAAYChCDQAAwFCEGgAAgKEINQAAAEMRagAAAIYi1AAAAAxFqAEAABiKUAMAADAUoQYAAGAoQg0AAMBQhBoAAICh/h9DCKcAB5mI6wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['Species'].value_counts().plot(kind='barh')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e831c7af",
   "metadata": {},
   "source": [
    "### Scatter Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "36a6c7e9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='SepalLengthCm', ylabel='PetalLengthCm'>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot(x = \"SepalLengthCm\", y = \"PetalLengthCm\", kind = 'scatter')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25a9950b",
   "metadata": {},
   "source": [
    "# Missing Values - COMING SOON\n",
    "# Outlier Treatment - COMING SOON\n",
    "# Reshaping Layout of Table - COMING SOON"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8795eea",
   "metadata": {},
   "source": [
    "## Missing Values\n",
    "\n",
    "http://analytics-magazine.org/missing-values/\n",
    "\n",
    "<b>Major takeaway:</b>\n",
    "1. Missing values in the data create uncertainty for the analyst and the information consumer because decisions need to be made without having the full picture.\n",
    "2. Missing values can also reduce the number of usable records for the analysis, or force analysts to eliminate variables from the analysis.\n",
    "3. Consequently, if an observation has a missing value in any of the required variables, the whole observation (data record) needs to be omitted from the analysis.\n",
    "4. Other options would be to exclude it from the analysis variable as a whole or to insert imputation values for the missing data points.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08f65712",
   "metadata": {},
   "source": [
    "## Reshaping Layout of Tables\n",
    "\n",
    "<img src=\"images/02_long_wide_format.PNG\" />\n",
    "\n",
    "<img style=\"float: right;\" width=\"400\" height=\"400\" src=\"images/03_pivot.PNG\">\n",
    "\n",
    "**Question: How to reshape the layout of tables?**  \n",
    "**Answer:** Change the structure of your data table in multiple ways. You can `melt()` your data table from `wide to long/tidy form` or `pivot()` from `long to wide format`. With aggregations built-in, a pivot table is created with a single command.\n",
    "\n",
    "Data is often stored in so-called `stacked` or `record` format. In a `record` or `wide` format, typically there is one row for each subject. In the `stacked` or `long` format there are multiple rows for each subject where applicable.\n",
    "\n",
    "<img src=\"images/04_melt.PNG\" />"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3f00d039",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
